package com.suzka.controller;

import com.suzka.pojo.Drug;
import com.suzka.service.DrugService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
/**
 * 药品信息控制器类，提供药品的增删改查及搜索功能
 * 使用RESTful风格API，支持跨域访问
 */
@RestController
@RequestMapping("/drugs")
@CrossOrigin
public class DrugController {

    @Autowired
    private DrugService drugService;

    /**
     * 获取所有药品信息
     * @return ResponseEntity<List<Drug>> 包含所有药品信息的响应实体，HTTP状态码为200
     */
    @GetMapping
    public ResponseEntity<List<Drug>> findAll() {
        return ResponseEntity.ok(drugService.findAll());
    }

    /**
     * 根据ID查询单个药品信息
     * @param id 药品ID
     * @return ResponseEntity<Drug> 包含查询结果的响应实体，存在则返回200状态码和药品数据，否则返回404状态码
     */
    @GetMapping("/{id}")
    public ResponseEntity<Drug> findById(@PathVariable Integer id) {
        Drug drug = drugService.findById(id);
        return drug != null ? ResponseEntity.ok(drug) : ResponseEntity.notFound().build();
    }

    /**
     * 新增药品信息
     * @param drug 要保存的药品对象（通过请求体传递）
     * @return ResponseEntity<Boolean> 包含操作结果的响应实体，成功返回true和200状态码
     */
    @PostMapping
    public ResponseEntity<Boolean> save(@RequestBody Drug drug) {
        return ResponseEntity.ok(drugService.save(drug));
    }

    /**
     * 更新药品信息
     * @param id 要更新的药品ID
     * @param drug 包含更新数据的药品对象（通过请求体传递）
     * @return ResponseEntity<Boolean> 包含操作结果的响应实体，成功返回true和200状态码
     */
    @PutMapping("/{id}")
    public ResponseEntity<Boolean> update(@PathVariable Integer id, @RequestBody Drug drug) {
        drug.setId(id);
        return ResponseEntity.ok(drugService.update(drug));
    }

    /**
     * 根据ID删除药品
     * @param id 要删除的药品ID
     * @return ResponseEntity<Boolean> 包含操作结果的响应实体，成功返回true和200状态码
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Boolean> deleteById(@PathVariable Integer id) {
        return ResponseEntity.ok(drugService.deleteById(id));
    }

    /**
     * 根据名称关键词搜索药品
     * @param keyword 搜索关键词
     * @return ResponseEntity<List<Drug>> 包含搜索结果列表的响应实体，HTTP状态码为200
     */
    @GetMapping("/search")
    public ResponseEntity<List<Drug>> searchByName(@RequestParam String keyword) {
        return ResponseEntity.ok(drugService.searchByName(keyword));
    }
}
